<?php

include_once "../model/dao/ConectaDB.php";
include_once "../model/dao/DBProfessor.php";
include_once "../model/dao/DBTipoPermissao.php";
include_once "../model/dao/DBTcc.php";
include_once "../model/dao/DBAluno.php";
include_once "Usuario.php";
include_once "Defesa.php";
include_once "TipoPermissao.php";
include_once "Banca.php";
include_once "GerenciaEnvioDeEmail.php";

/**
 * Classe Professor, responsável por representar o estado e comportamento dos objetos de tipo aluno.
 * Essa classe é uma especialização de Usuário, ou seja, herda métodos e atributos de usuário.
 *
 * @author gabrielbmoro
 */
class Professor extends Usuario {

    private $papeis;
    private $tipoProfessor;
    private $siape;
    private $cpf;
    private $dbProfessor;
    private $tipoPermissao;
    private $dbPermissao;
    private $dbTcc;
    private $dbAluno;

    public function __construct($papeis, $tipoProfessor, $siape, $cpf, $senha, $email, $nome) {
        $this->papeis = $papeis;
        $this->tipoProfessor = $tipoProfessor;
        $this->siape = $siape;
        $this->cpf = $cpf;
        parent::__construct($senha, $email, $nome);

        $this->tipoPermissao = new TipoPermissao($tipoProfessor);

        $this->dbProfessor = new DBProfessor();
        $this->dbPermissao = new DBTipoPermissao();
        $this->dbTcc = new DBTcc();
        $this->dbAluno = new DBAluno();
    }

    public function aprovarEntregaDoTCC($alunoName, $tituloTcc) {
        $campo = array(0 => $alunoName, 1 => $tituloTcc);
        return $this->dbTcc->editarAutorizacao($campo, true);
    }

    public function agendarDefesa($professor1, $professor2, $professor3, $horario, $data, $numSala, $aluno) {
        $defesa = new Defesa($professor1, $professor2, $professor3, $horario, $data, $numSala, $aluno);
        return $defesa->cadastrarDados();
    }

    public function alterarDadosDefesa($data, $horario, $numberSala, $idTcc) {
        $defesa = new Defesa(null, null, null, null, null, null, null);
        $defesa->setData($data);
        $defesa->setHorario($horario);
        $defesa->setNumSala($numberSala);
        return $result = $defesa->atualizarDados($idTcc);
    }

    public function alterarBanca($professor1, $professor2, $professor3, $nomeAluno) {
        $banca = new Banca($professor1, $professor2, $professor3);
        return $banca->alterarDados($nomeAluno);
    }

    public function enviarConviteABanca($email1, $email2, $email3, $nomeOrientador, $tituloTcc, $nomeDoAluno, $mensagem, $emailRemetente) {
        $gerencia = new GerenciaEnvioDeEmail(array(0 => $email1, 1 => $email2, 2 => $email3), $mensagem, $emailRemetente);
        return $gerencia->enviar();
    }

    public function confirmarOrientacao($booleanAuto, $nameAluno) {
        return $this->dbAluno->alterarConfirmacaoOrientacao($nameAluno, $booleanAuto);
    }

    public function getPapeis() {
        return $this->papeis;
    }

    public function getTipoProfessor() {
        return $this->tipoProfessor;
    }

    public function getSiape() {
        return $this->siape;
    }

    public function getCpf() {
        return $this->cpf;
    }

    public function setPapeis($papeis) {
        $this->papeis = $papeis;
    }

    public function setTipoProfessor($tipoProfessor) {
        $this->tipoProfessor = $tipoProfessor;
    }

    public function setSiape($siape) {
        $this->siape = $siape;
    }

    public function setCpf($cpf) {
        $this->cpf = $cpf;
    }

    public function getNomeBanca($palavra) {
        return $this->dbProfessor->selectLike("`nome`", $palavra);
    }

    public function getNomeById($idProfessor) {
        return $this->dbProfessor->recuperar($idProfessor);
    }

    public function getTipoPermissao($login) {
        $idProfessor = $this->dbProfessor->recuperarIdPorLogin($login);
        $permissao = $this->dbProfessor->recuperarPermissao($idProfessor);
        $this->tipoPermissao = new TipoPermissao($permissao);
        return $this->tipoPermissao->getTipoDefinido();
    }

    public function gerarFormularioDeAvaliacao() {
        
    }

    public function gerarAtaDeDefesa() {
        
    }

    public function gerarParecerBanca() {
        
    }

    public function gerarListaDePresenca() {
        
    }

    public function cadastrarNotas() {
        return false;
    }

    public function distribuirTccParaBanca() {
        return false;
    }

    public function gerarRelatorioFinal() {
        
    }
    
    
    public function getDadosDePerfil($idAluno) {
        $arrayList= $this->dbProfessor-> recuperarDadosPerfil($idAluno);
        return $arrayList;
    }


}
